import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

/*
相当于data的对象
包含n个可变的属性数据
*/
const state = {
  count: 1 
}

/*
包含多个直接更新state方法(回调函数)的对象
mutation方法不要包含异步操作和逻辑处理代码
*/
const mutations = {
  INCREMENT(state) {
    state.count++
  },
  DECREMENT(state) {
    state.count--
  }
}

/*
包含多个间接更新state方法(回调函数)的对象
action方法包含异步操作和逻辑处理代码
*/
const actions = {
  // increment({commit}) {
  //   commit('INCREMENT')
  // },
  // decrement({commit}) {
  //   commit('DECREMENT')
  // },
  incrementOdd({commit, state}) {
    if(state.count % 2 === 1) {
      commit('INCREMENT')
    }
  },
  incrementAsync({commit}) {
    setTimeout(() => {
      commit('INCREMENT')
    }, 1000);
  }
}

// 一个包含n个基于state数据的getter计算属性的方法的对象(相当于computed对象)
const getters = {
  evenOrOdd(state) {
    return state.count % 2 === 1 ? '奇数' : '偶数'
  }
}


const store = new Vuex.Store({
  state,
  mutations,
  actions,
  getters
})

export default store